package com.sxjh.common;

import java.math.BigDecimal;

/**
 * 财务报表工具类
 * @author zixin
 * @since 2021-07-14 09:59
 */
public class FinanceUtil {

  /**
   * 计算不含税单价
   * 默认四舍五入保留四位小数
   * @param money 含税价格
   * @param taxRate 税率（单位%）
   */
  public static BigDecimal computeNoTax(BigDecimal money, BigDecimal taxRate) {
    return computeNoTax(money, taxRate, 4);
  }

  /**
   * 计算不含税单价
   * 结果四舍五入
   * @param money 含税价格
   * @param taxRate 税率（单位%）
   * @param scale 保留几位小数
   */
  public static BigDecimal computeNoTax(BigDecimal money, BigDecimal taxRate, int scale) {
    return computeNoTax(money, taxRate, scale, BigDecimal.ROUND_HALF_UP);
  }

  /**
   * 计算不含税单价
   * 计算公式 含税价格*100/(税率%+100%)
   * @param money 含税价格
   * @param taxRate 税率（单位%）
   * @param scale 保留几位小数
   *
   */
  public static BigDecimal computeNoTax(BigDecimal money, BigDecimal taxRate, int scale, int roundingMode) {
    // 参数值异常处理
    BigDecimal zero = new BigDecimal(0);
    if (money == null) return zero;
    if (taxRate == null) return money;
    if (money.compareTo(zero) != 1) return zero;
    if (taxRate.compareTo(zero) != 1) return money;
    // 计算不含税价格
    // temp2 = 税率% + 100%
    BigDecimal temp = new BigDecimal(100);
    BigDecimal temp2 = temp.add(taxRate);
    // priceIncludingTax = 价格*100 / temp2
    BigDecimal priceIncludingTax = money.multiply(temp).divide(temp2, scale, roundingMode);
    return priceIncludingTax;
  }

}